/* Software Name : AsmDex
 * Version : 1.0
 *
 * Copyright © 2012 France Télécom
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. Neither the name of the copyright holders nor the names of its
 *    contributors may be used to endorse or promote products derived from
 *    this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
 * THE POSSIBILITY OF SUCH DAMAGE.
 */
package org.objectweb.asmdex.logging;

/**
 * LogElement for the Visit of a Operation Instruction of a Method.
 * 
 * @author Julien Névo
 */
public class LogElementMethodVisitOperationInsn extends LogElement {

	/** The opcode. */
	protected int opcode;
	
	/** The destination register. */
	protected int destinationRegister;
	
	/** The first source register. */
	protected int firstSourceRegister;
	
	/** The second source register. */
	protected int secondSourceRegister;
	
	/** The value. */
	protected int value;
	
	/**
	 * Instantiates a new log element method visit operation insn.
	 *
	 * @param opcode the opcode
	 * @param destinationRegister the destination register
	 * @param firstSourceRegister the first source register
	 * @param secondSourceRegister the second source register
	 * @param value the value
	 */
	public LogElementMethodVisitOperationInsn(int opcode, int destinationRegister,
			int firstSourceRegister, int secondSourceRegister, int value) {
		this.opcode = opcode;
		this.destinationRegister = destinationRegister;
		this.firstSourceRegister = firstSourceRegister;
		this.secondSourceRegister = secondSourceRegister;
		this.value = value;
	}

	@Override
	public ElementType getType() {
		return ElementType.TYPE_METHOD_VISIT_OPERATION_INSN;
	}

	@Override
	public boolean isElementEqual(LogElement e) {
		LogElementMethodVisitOperationInsn a = (LogElementMethodVisitOperationInsn)e;
		return (opcode == a.opcode)
			&& (destinationRegister == a.destinationRegister)
			&& (firstSourceRegister == a.firstSourceRegister)
			&& (secondSourceRegister == a.secondSourceRegister)
			&& (value == a.value);
	}

}
